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
next prev parent 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).