The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
* [TUHS] Design of the AT&T assembly syntax
@ 2019-10-28 20:14 Robert Clausecker
  2019-10-28 21:06 ` Seth Morabito
  0 siblings, 1 reply; 10+ messages in thread
From: Robert Clausecker @ 2019-10-28 20:14 UTC (permalink / raw)
  To: tuhs

Some time ago, I wrote a piece [1] about the design of the AT&T
assembler syntax.  While I'm still not quite sure if everything in there
is correct, this explanation seemed plausible to me; the PDP-11
assembler being adapted for the 8086, then the 80386 and then ELF
targets, giving us today's convoluted syntax.

The one thing in this chain I have never found is an AT&T style
assembler for x86 before ELF was introduced.  Supposedly, it would get
away without % as a register prefix, thus being much less obnoxious to
use.  Any idea if such an assembler ever existed and if yes where?
I suppose Xenix might have shipped something like that.

The only AT&T syntax assemblers I know today are those from Solaris,
the GNU project, the LLVM project, and possibly whatever macOS ships.
Are there (or where there) any other x86 AT&T assemblers?  Who was
the first party to introduce this?

Yours,
Robert Clausecker

[1]: https://stackoverflow.com/a/42250270/417501

-- 
()  ascii ribbon campaign - for an 8-bit clean world 
/\  - against html email  - against proprietary attachments

^ permalink raw reply	[flat|nested] 10+ messages in thread
* [TUHS] Design of the AT&T assembly syntax
@ 2019-10-29 14:38 Alexander Voropay
  0 siblings, 0 replies; 10+ messages in thread
From: Alexander Voropay @ 2019-10-29 14:38 UTC (permalink / raw)
  To: The Eunuchs Hysterical Society

Robert Clausecker <fuz@fuz.su> wrote:

> > I've tried Microport SystemV /386 (SysV R3.2). It uses COFF
> Nice find!  It seems to use lcall to selector 7 for system calls.  A
> similar choice was made in 386BSD all the way through FreeBSD 2.2.8
> where it was replaced with int $0x80 as in Linux.

Technically speaking
lcall $0x07,$0
uses selector 0 with RPL=3 (bit0 and bit1==1) and LDT (bit2==1)

It seems it's oldest way to call kernel from userspace on x86 architecture.
AT&T's programmers used this sycall convention for SysVR3 and
SysVR4 on i386 (not sure about SysVR2 on i286).
There are very few examples with lcall-type syscall  i.e.
http://www.sco.com/developers/devspecs/abi386-4.pdf
(figure 3-26)
(and leaked SysVR4 i386 sources)

William Jolitz used this convention in his amazing articles about
porting BSD4.3 to the i386 (c)1991
http://www.informatica.co.cr/unix-source-code/research/1991/0101.html
(p."System Call Inteface"). See also 386BSD 0.0:
https://github.com/386bsd/386bsd/blob/0.0/arch/i386/i386/locore.s#L361
(Did he run AT&T userspace on his kernel ???)
As you mentioned, most of early *BSD systems on i386 also used lcall.

Linus selected to use "DOS-style" call with INT 0x80.
More recent BSD on i386 also use INT.
https://john-millikin.com/unix-syscalls
http://asm.sourceforge.net/intro/hello.html

Solaris on x86 (ex. SysVR4) also uses lcall. See a
https://www.cs.dartmouth.edu/sergey/cs258/solaris-on-x86.pdf
p.4.2.3
and Solaris (later OpenSolaris and later Illumos) sourcecode.

^ permalink raw reply	[flat|nested] 10+ messages in thread
* [TUHS] Design of the AT&T assembly syntax
@ 2019-10-28 21:48 Alexander Voropay
  2019-10-28 21:59 ` Robert Clausecker
  0 siblings, 1 reply; 10+ messages in thread
From: Alexander Voropay @ 2019-10-28 21:48 UTC (permalink / raw)
  To: The Eunuchs Hysterical Society

Robert Clausecker <fuz@fuz.su>wrote:

> The one thing in this chain I have never found is an AT&T style
> assembler for x86 before ELF was introduced.

There were alot of AT&T codebase ports to x86 architecture except Xenix:
Microport, INTERACTIVE, Everex, Wyse e.t.c. using AT&T x86 syntax.

I've tried Microport SystemV /386 (SysV R3.2). It uses COFF
as format for executables:
See:
http://www.vcfed.org/forum/showthread.php?67736-History-behind-the-disk-images-of-AT-amp-T-UNIX-System-V-Release-4-Version-2-1-for-386&p=560039#post560039
(Rather interesting kernel ABI/Call convention)

and
https://gunkies.org/wiki/Unix_SYSVr3

There were also SystemV R2 to i286 ports i.e.:
https://gunkies.org/wiki/Microport_System_V
with a.out binary format.

^ permalink raw reply	[flat|nested] 10+ messages in thread
* [TUHS] Design of the AT&T assembly syntax
@ 2019-10-28 20:07 Robert Clausecker
  2019-10-28 22:08 ` Warner Losh
  0 siblings, 1 reply; 10+ messages in thread
From: Robert Clausecker @ 2019-10-28 20:07 UTC (permalink / raw)
  To: tuhs

Some time ago, I wrote a piece [1] about the design of the AT&T
assembler syntax.  While I'm still not quite sure if everything in there
is correct, this explanation seemed plausible to me; the PDP-11
assembler being adapted for the 8086, then the 80386 and then ELF
targets, giving us today's convoluted syntax.

The one thing in this chain I have never found is an AT&T style
assembler for x86 before ELF was introduced.  Supposedly, it would get
away without % as a register prefix, thus being much less obnoxious to
use.  Any idea if such an assembler ever existed and if yes where?
I suppose Xenix might have shipped something like that.

The only AT&T syntax assemblers I know today are those from Solaris,
the GNU project, the LLVM project, and possibly whatever macOS ships.
Are there (or where there) any other x86 AT&T assemblers?  Who was
the first party to introduce this?

Yours,
Robert Clausecker

[1]: https://stackoverflow.com/a/42250270/417501

-- 
()  ascii ribbon campaign - for an 8-bit clean world 
/\  - against html email  - against proprietary attachments

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-10-29 14:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-28 20:14 [TUHS] Design of the AT&T assembly syntax Robert Clausecker
2019-10-28 21:06 ` Seth Morabito
2019-10-29  0:31   ` Nemo Nusquam
  -- strict thread matches above, loose matches on Subject: below --
2019-10-29 14:38 Alexander Voropay
2019-10-28 21:48 Alexander Voropay
2019-10-28 21:59 ` Robert Clausecker
2019-10-28 20:07 Robert Clausecker
2019-10-28 22:08 ` Warner Losh
2019-10-28 22:24   ` Robert Clausecker
2019-10-28 22:29     ` Warner Losh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).