From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk0-f50.google.com ([209.85.213.50]) by ur; Wed Mar 22 01:05:47 EDT 2017 Received: by mail-vk0-f50.google.com with SMTP id z204so58389447vkd.1 for <9front@9front.org>; Tue, 21 Mar 2017 22:05:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=6b+5BIoeniUZvXkRQITrZkGVNM9WjRVawTj8jmrPQHY=; b=SI/JVbQGO8mR3UJQMY3ovgw+OGz3167XaFxEeOvc9qbWHxDdiuzVSwdg8JwOz3zWO3 wrZDKZk2J/odWsWMa9Dkq2WWoU5rPUWoJd5/W2QI6VlqHaQlpt4EqEyVZ48MxoXRFdLR 5hmOQ1GXIlhPpL6xfATVqGlcTeykod0ewimFkaKn0NuaMtxItdSiJJNquWjKistqh5Ax pJQgaiDqcZB3suOR89tLxgQBfNaBALwsafQ5n4lksVvRnJ36GFZJEws/yKkdk+uWdCsh fTpeU+r20JLteOYA1hsFdjFyFK9U3MIQ9ZGmETQ+x3lX/Xd7P6/o3MIAXaWl11FHA6Nd kAug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=6b+5BIoeniUZvXkRQITrZkGVNM9WjRVawTj8jmrPQHY=; b=DL+HiTf67QY3FoHRXaA/948DUvkvF28ZsY4dnoN9liU0ctKu4QOND1LX38D4VNUiIB E28eJLd1CBTdV9NiaurXEoviuprmUdB6sHb0gu6IOq8JaxB0YqeQ61BxrfKhdtADeTVr NfOp6x4eEkXzunqsqOV/116XCSxq3LduvfbHm6F3Nzta7Zp5Q9CmjAKMPdxUlzco84fC h7G9TwGSnCVMi7dFtpJQFmYKG429kN9gh3yUWh8B977zxJcjLqvhdM/qKujD6md8Zzhu vBRrGdFj/EaFMpLwuJVezfD7T5SZK6botwNsM168N0Zdh29tVQqWf9l4P3bgpjSLJN7x C8Yg== X-Gm-Message-State: AFeK/H2sfTryo/DPmOaaxa9qXFAhPcubbpSBi3EaI2uu1z45SYA1MSOJpop0BMI/yEZc91xIa5BepLqF1GyIvg== X-Received: by 10.31.15.82 with SMTP id 79mr4879291vkp.156.1490159143726; Tue, 21 Mar 2017 22:05:43 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.45.13 with HTTP; Tue, 21 Mar 2017 22:05:43 -0700 (PDT) In-Reply-To: <20170321214843.03541405e369f0c84be4a3f1@eigenstate.org> References: <20170321214843.03541405e369f0c84be4a3f1@eigenstate.org> From: Benjamin Purcell Date: Wed, 22 Mar 2017 00:05:43 -0500 Message-ID: Subject: Re: [9front] Patch: Assemblers do not handle minimum vlong value correctly. To: 9front@9front.org Content-Type: text/plain; charset=UTF-8 List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: virtualized distributed element-scale injection generator Thank you, committed. -spew On Tue, Mar 21, 2017 at 11:48 PM, Ori Bernstein wrote: > The Plan 9 assemblers use strtoll to parse the integer literals > in their input. It turns out that this is almost correct, but > VLONG_MIN is clamped. This patch changes to use strtoull > in order to allow the full range of integers. > > Below is a program that demosntrates the problem: > > term% cat test.s > GLOBL L2<>+0(SB),$8 > DATA L2<>+0(SB)/8,$-9223372036854775808 > > TEXT main+0(SB),2,$0 > MOVQ L2<>+0(SB),AX > RET > > term% 6a test.s > term% 6l test.6 /amd64/lib/libc.a > term% acid 6.out > 6.out:amd64 plan 9 executable > /sys/lib/acid/port > /sys/lib/acid/amd64 > acid: new() > 33489: overflow _main SUBQ $0x90,SP > 33489: breakpoint main+0x8 RET > acid: *L2 > 0x8000000000000001 > acid: -9223372036854775808 > 0x8000000000000000 > > And the patch: > > > diff -r a01d0802d023 sys/src/cmd/cc/lexbody > --- a/sys/src/cmd/cc/lexbody Mon Mar 20 19:15:40 2017 +0100 > +++ b/sys/src/cmd/cc/lexbody Tue Mar 21 21:45:44 2017 -0700 > @@ -343,10 +343,9 @@ > goto casee; > *cp = 0; > if(sizeof(yylval.lval) == sizeof(vlong)) > - yylval.lval = strtoll(symb, nil, 10); > + yylval.lval = strtoull(symb, nil, 10); > else > - yylval.lval = strtol(symb, nil, 10); > - > + yylval.lval = strtoul(symb, nil, 10); > ncu: > while(c == 'U' || c == 'u' || c == 'l' || c == 'L') > c = GETC(); > > -- > Ori Bernstein