From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/9761 Path: news.gmane.org!not-for-mail From: Patrick Oppenlander Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH 2/2] add powerpc64 port Date: Tue, 29 Mar 2016 10:04:48 +1100 Message-ID: <56F9B890.9010409@gmail.com> References: <1459113619-24090-1-git-send-email-koorogi@koorogi.info> <1459113619-24090-3-git-send-email-koorogi@koorogi.info> <20160327233709.GE21636@brightrain.aerifal.cx> <56F9A973.2040809@gmail.com> <20160328221052.GJ21636@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1459206316 20647 80.91.229.3 (28 Mar 2016 23:05:16 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 28 Mar 2016 23:05:16 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-9774-gllmg-musl=m.gmane.org@lists.openwall.com Tue Mar 29 01:05:10 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1akgDb-0004gQ-QD for gllmg-musl@m.gmane.org; Tue, 29 Mar 2016 01:05:07 +0200 Original-Received: (qmail 30112 invoked by uid 550); 28 Mar 2016 23:05:04 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 30085 invoked from network); 28 Mar 2016 23:05:03 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 In-Reply-To: <20160328221052.GJ21636@brightrain.aerifal.cx> Xref: news.gmane.org gmane.linux.lib.musl.general:9761 Archived-At: On 29/03/16 09:10, Rich Felker wrote: > On Tue, Mar 29, 2016 at 09:00:19AM +1100, Patrick Oppenlander wrote: >> On 28/03/16 10:37, Rich Felker wrote: >>> This is kind of the reason why I was hesitant to add .S support for so >>> long. :-) >>> >>> I don't want to reject it outright, but the idea of adding .S support >>> was just to allow conditional compilation, not to do condensed >>> assembly sources that require macro expansion. I can see where the >>> code might be unwieldy without this though. Anyone else have opinions? >> IMHO .S support is worthwhile just to be able to use constant >> definitions in assembly. >> >> For example, >> >> __unmapself: >> mov r7,#SYS_munmap >> svc 0 >> mov r7,#SYS_exit >> svc 0 >> >> Is a clearer than: >> >> __unmapself: >> mov r7,#91 >> svc 0 >> mov r7,#1 >> svc 0 >> >> Especially when approaching the source for the first time. > Are there any asm source files making syscalls where it's not obvious > from the public contract for the function(s) being implemented which > syscall they're making? I think it's just as easy to add a comment > with the syscall name if it's unclear, and then the actual number is > present too which is nice because it matches the dissembly. I guess the reason I chose that particular example because it was one of my recent pain points porting musl to a small embedded RTOS. A comment would probably have been sufficient -- at least then 'grep' would have found it. > The time when it would actually improve things to have symbolic > constants in asm files is for places where the constant can actually > vary, e.g. due to being derived from an offset in an implementation > internal structure or such (like struct __pthread). But preprocessor > macros cannot represent that in asm source files anyway. :( I have seen a solution to this problem. Can't exactly remember where but the gist of it was to hack some gcc inline assembly together to generate the required offset constants: test.c: struct test { int a; int b; }; #define offset(def, struct, member) \ __asm__("\n#define " def " %0" :: "i" (__builtin_offsetof(struct, member))) void offsets(void) { offset("A_OFFSET", struct test, a); offset("B_OFFSET", struct test, b); } compile with gcc -S test.c to generate test.s: .file "test.c" .text .globl offsets .type offsets, @function offsets: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 #APP # 11 "test.c" 1 #define A_OFFSET $0 # 0 "" 2 # 12 "test.c" 1 #define B_OFFSET $4 # 0 "" 2 #NO_APP nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size offsets, .-offsets .ident "GCC: (GNU) 5.3.0" .section .note.GNU-stack,"",@progbits pull out the #defines with sed -ne '/^#define/ s/\$// p' test.s #define A_OFFSET 0 #define B_OFFSET 4 Somewhat grotesque, but it works. Patrick