From owner-freebsd-current@freebsd.org Mon Jun 29 08:43:27 2015 Return-Path: Delivered-To: freebsd-current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E7E6298D294; Mon, 29 Jun 2015 08:43:26 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 742C610D8; Mon, 29 Jun 2015 08:43:26 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.9/8.14.9) with ESMTP id t5T8hGfr091821 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Mon, 29 Jun 2015 11:43:16 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.9.2 kib.kiev.ua t5T8hGfr091821 Received: (from kostik@localhost) by tom.home (8.14.9/8.14.9/Submit) id t5T8hGct091820; Mon, 29 Jun 2015 11:43:16 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 29 Jun 2015 11:43:16 +0300 From: Konstantin Belousov To: Julian Elischer Cc: "hackers@freebsd.org" , freebsd-current Subject: Re: libc compile failure with new syscall. Message-ID: <20150629084316.GS2080@kib.kiev.ua> References: <559102DB.4050902@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <559102DB.4050902@freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Jun 2015 08:43:27 -0000 On Mon, Jun 29, 2015 at 04:33:31PM +0800, Julian Elischer wrote: > Hi all, > > At $JOB we have a few extra syscalls that we have added to our kernel. > > After generating the new sysent files in /sys/kern, libc fails to > compile with: > > ===> lib/libc (obj,depend,all,install) > building shared library libc.so.7 > [...] > /usr/bin/ld: rlk_check_offline.So: relocation R_X86_64_32 against > `SYS_rlk_check_offline' can not be used when making a shared object; > recompile with -fPIC > rlk_check_offline.So: could not read symbols: Bad value > *** [libc.so.7] Error code 1 > > this suggests that the code that generates the libc syscall stubs is > generating something the linker doesn't like. No, this suggests that the symbol SYS_rlk_check_offline was undefined when assembling your rlk_check_offline.S. Check the way you generated the stuff from syscalls.master. Most likely, sys/sys/syscall.h update was lost. > > > the definition of the syscall is: > > 588 AUE_NULL NOSTD { int rlk_check_offline(char *localfs, > char *path, \ > int *is_offline, int rlk_flags, \ > int *cache_status); } > ------ > which generates (in various files): > { AS(rlk_check_offline_args), (sy_call_t *)lkmressys, > AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 588 = rlk_check_offline */ > ------ > "rlk_check_offline", /* 588 = > rlk_check_offline */ > ------ > /* rlk_check_offline */ > case 588: { > struct rlk_check_offline_args *p = params; > uarg[0] = (intptr_t) p->localfs; /* char * */ > uarg[1] = (intptr_t) p->path; /* char * */ > uarg[2] = (intptr_t) p->is_offline; /* int * */ > iarg[3] = p->rlk_flags; /* int */ > uarg[4] = (intptr_t) p->cache_status; /* int * */ > *n_args = 5; > break; > } > ------- > #define SYS_rlk_check_offline 588 ^^^^^ This must be seen by asm. Note that in the stock sources, lib/libc/amd64/SYS.h includes syscall.h. > ------- > struct rlk_check_offline_args { > char localfs_l_[PADL_(char *)]; char * localfs; char > localfs_r_[PADR_(char *)]; > char path_l_[PADL_(char *)]; char * path; char > path_r_[PADR_(char *)]; > char is_offline_l_[PADL_(int *)]; int * is_offline; char > is_offline_r_[PADR_(int *)]; > char rlk_flags_l_[PADL_(int)]; int rlk_flags; char > rlk_flags_r_[PADR_(int)]; > char cache_status_l_[PADL_(int *)]; int * cache_status; char > cache_status_r_[PADR_(int *)]; > }; > int sys_rlk_check_offline(struct thread *, struct > rlk_check_offline_args *); > #define SYS_AUE_rlk_check_offline AUE_NULL > > ------- > > > > the generated stub looks like: > $ cat /usr/obj/usr/src/lib/libc/rlk_check_offline.S > > #include "compat.h" > #include "SYS.h" > RSYSCALL(rlk_check_offline) > .section .note.GNU-stack,"",%progbits > > -------- > > > nothing in this definition looks special, So I'm surprised that the > libc build doesn't like it. > This is a (just) post 10.1 10-stable. But we plan to move to 11 soon too. > > Any suggestions as to what I should change would be greatly > appreciated.. I'm running out of ideas. > > > > > > > > _______________________________________________ > freebsd-current@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"