From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755450AbbBTXVy (ORCPT ); Fri, 20 Feb 2015 18:21:54 -0500 Received: from mail-la0-f46.google.com ([209.85.215.46]:45848 "EHLO mail-la0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755400AbbBTXVw (ORCPT ); Fri, 20 Feb 2015 18:21:52 -0500 From: Rasmus Villemoes To: Andrew Morton , Rasmus Villemoes , "Peter Zijlstra (Intel)" , Tejun Heo Cc: linux-kernel@vger.kernel.org Subject: [PATCH 3/4] lib/vsprintf.c: Eliminate duplicate hex string array Date: Sat, 21 Feb 2015 00:21:18 +0100 Message-Id: <1424474479-25543-4-git-send-email-linux@rasmusvillemoes.dk> X-Mailer: git-send-email 2.1.3 In-Reply-To: <1424474479-25543-1-git-send-email-linux@rasmusvillemoes.dk> References: <1424474479-25543-1-git-send-email-linux@rasmusvillemoes.dk> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org gcc doesn't merge or overlap const char[] objects with identical contents (probably language lawyers would also insist that these things have different addresses), but there's no reason to have the string "0123456789ABCDEF" occur in multiple places. hex_asc_upper is declared in kernel.h and defined in lib/hexdump.c, which is unconditionally compiled in. Signed-off-by: Rasmus Villemoes --- lib/vsprintf.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 98f1ce907d3d..7a299d43987a 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -383,9 +383,6 @@ static noinline_for_stack char *number(char *buf, char *end, unsigned long long num, struct printf_spec spec) { - /* we are called with base 8, 10 or 16, only, thus don't need "G..." */ - static const char digits[16] = "0123456789ABCDEF"; /* "GHIJKLMNOPQRSTUVWXYZ"; */ - char tmp[3 * sizeof(num)]; char sign; char locase; @@ -422,7 +419,7 @@ char *number(char *buf, char *end, unsigned long long num, /* generate full string in tmp[], in reverse order */ i = 0; if (num < spec.base) - tmp[i++] = digits[num] | locase; + tmp[i++] = hex_asc_upper[num] | locase; else if (spec.base != 10) { /* 8 or 16 */ int mask = spec.base - 1; int shift = 3; @@ -430,7 +427,7 @@ char *number(char *buf, char *end, unsigned long long num, if (spec.base == 16) shift = 4; do { - tmp[i++] = (digits[((unsigned char)num) & mask] | locase); + tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase); num >>= shift; } while (num); } else { /* base 10 */ -- 2.1.3