Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <424674f0-8460-7807-7366-a87d8588e8bc@davidgf.es>
Date: Sat, 25 Nov 2017 21:52:06 +0100
From: David Guillen Fandos <david@...idgf.es>
To: musl@...ts.openwall.com
Subject: Do not use 64 bit division if possible

Hey there,

Just noticed that my binary was getting some gcc functions for integer 
division in some places coming from musl. I checked and it seems that, 
even though musl assumes PAGE_SIZE is always power of two, that we 
divide by it instead of using shifts for that. This results in extra 
overhead and slow division on platforms that do not have a 64 bit 
divider (even the ones that do have 32 bit divider).

So I propose a patch here, let me know what you people think about.

David


diff --git a/src/conf/sysconf.c b/src/conf/sysconf.c
index b8b761d0..aa9fc9d1 100644
--- a/src/conf/sysconf.c
+++ b/src/conf/sysconf.c
@@ -4,6 +4,7 @@ long sysconf(int name)
  #include <sys/sysinfo.h>
  #include "syscall.h"
  #include "libc.h"
+#include "atomic.h"

  #define JT(x) (-256|(x))
  #define VER JT(1)
@@ -206,7 +206,7 @@ long sysconf(int name)
  		if (name==_SC_PHYS_PAGES) mem = si.totalram;
  		else mem = si.freeram + si.bufferram;
  		mem *= si.mem_unit;
-		mem /= PAGE_SIZE;
+		mem >>= (unsigned)(a_ctz_l(PAGE_SIZE));
  		return (mem > LONG_MAX) ? LONG_MAX : mem;
  		case JT_ZERO & 255:
  		return 0;

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.