The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: lehmann@ans-netz.de (Oliver Lehmann)
Subject: [TUHS] link() syscall implementation
Date: Sat, 14 Nov 2015 22:42:05 +0100	[thread overview]
Message-ID: <20151114224205.Horde.pNedl1JFkdNwTKQKHr6OiXv@avocado.salatschuessel.net> (raw)
In-Reply-To: <m2bnawqnze.fsf@fastmail.com>


Random832 <random832 at fastmail.com> wrote:

> Oliver Lehmann <lehmann at ans-netz.de> writes:
>>         ldl        rr2,rr8(#4)
>>         ldl        rr4,rr2
>>         and        r4,#32512
>>         ldl        _u+78,rr4
>
> This looks like it could be:
>   u.u_dirp.l = uap->linkname;
>   u.u_dirp.left &= 0x7f00;

Good guess, but the optimizer didn't optimized this "away" so this
generates literally what is done in C:

         ldl     rr2,rr8(#4)
         ldl     _u+78,rr2
         ld      r2,_u+78
         and     r2,#32512
         ld      _u+78,r2


>
>>
>> does the same but  with more instructions and of course not 1:1
>> binary "the same" ;)
>> wonder why
>>   u.u_dirp.l = (caddr_t)(((long)uap->linkname) & 0x7F00FFFF);
>> didn't worked.
>
> Well, what code did it generate? Are longs in the same byte order as
> pointers (could it have needed to be FFFF7F00)?

Should be the same byte order, yes. It generates:

0530 3582  0004     584         ldl     rr2,rr8(#4)
0536 0702  7f00                 and     r2,#32512
04d2 5d02  8000*    585         ldl     _u+78,rr2
04d6 004e*

OK - it is not temporarily copied to rr4, but directly modfied in
rr2 and then assigned to u.u_dirp. It should be "the same" - But
  - ln(1) does not work with this code. Instead of creating a
hardlink, it creates a new empty file (different inode).

And to be honest - who would write such a code in the first place
    u.u_dirp.l = (caddr_t)(((long)uap->linkname) & 0x7F00FFFF);
Feels to crazy for me as someone would really write such a code.
There are so many "better" way (readability) someone would come
up with than this.... I/We just didn't figured out the better
way yet ;)

Another possibility could be, that the sys2.o was generated with
an earlier version if the assembler and not recompiled with the
"newer"/shipped one and that it might be impossible to generate
this code now. But all sccs tags in the assembler are before the
sccs tag in sys2.o....

Regards, Oliver



  reply	other threads:[~2015-11-14 21:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-14 12:34 Oliver Lehmann
2015-11-14 12:56 ` Oliver Lehmann
2015-11-14 15:17   ` Oliver Lehmann
2015-11-14 21:18     ` Random832
2015-11-14 21:42       ` Oliver Lehmann [this message]
2015-11-14 23:07         ` Random832
2015-11-15 14:43           ` Oliver Lehmann
2015-11-14 13:33 ` Random832

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151114224205.Horde.pNedl1JFkdNwTKQKHr6OiXv@avocado.salatschuessel.net \
    --to=lehmann@ans-netz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).