From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/9053 Path: news.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: dynamic linker command line invocation Date: Mon, 4 Jan 2016 15:59:20 -0500 Message-ID: <20160104205920.GW238@brightrain.aerifal.cx> References: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1451941178 5469 80.91.229.3 (4 Jan 2016 20:59:38 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 4 Jan 2016 20:59:38 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-9066-gllmg-musl=m.gmane.org@lists.openwall.com Mon Jan 04 21:59:37 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 1aGCE4-0001fz-WA for gllmg-musl@m.gmane.org; Mon, 04 Jan 2016 21:59:37 +0100 Original-Received: (qmail 15408 invoked by uid 550); 4 Jan 2016 20:59:34 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 15390 invoked from network); 4 Jan 2016 20:59:33 -0000 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:9053 Archived-At: On Mon, Jan 04, 2016 at 11:59:16AM -0500, N Jain wrote: > Hi All, > > I am trying to add ldso functionality in my kernel. I am loading the > dynamic linker "ld-musl-arm.so.1" into memory and passing the other > application as command line which requires the dynamic libraries but the > linker is generating fault during stage 2 "__dls2" at some random location > 0x464cc57f. > > I am fairly new to dynamic linking code and trying to understand _dlstart_c > code functionality. Can any one explain what are the command line arguments > dynamic linker expects at this entry point ? I am giving numArgs = 1 and > argv = app.elf after loading "ld-musl-arm.so.1" into memory ? Is this > approach correct ? Do I have to also load app.elf into memory or the > dynamic linker will take care of loading it ? Are you providing a complete and correct aux vector after the argv[] and environ[]? If it's missing or contains incorrect information this would surely cause crashing. The ideal way to load dynamic-linked programs is to have the kernel load both the main executable and the dynamic linker (where the latter is obtained from the PT_INTERP header in the main program). In this case, AT_BASE needs to point to the offset at which the dynamic linker was loaded, and AT_PHDR needs to point to the main program's program headers (and AT_PHENT and AT_PHNUM should also be valid). AT_ENTRY also needs to point to the main program's entry point (from the ELF Ehdr). On the other hand, if you want to just load the dynamic linker and pass the name of the program to run as an argument, AT_BASE must be either unset or 0, and AT_PHDR must point to the dynamic linker's program headers. This approach is undesirable however because it's subject to race conditions if the executable is moved/replaced. There's also the issue that the address you loaded the dynamic linker at may conflict with the address where the main program is to be loaded, but this is a non-issue for PIE executables. Rich